package controllers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import models.Constantes;
import views.CriarGUI;

public class CriarController {

	private CriarGUI criarGUI;
	private JFrame jfAnterior;
	private UDPServerController servidor = null;
	private TCPServerController socketServidor = null;
	
	public static String JogoNome = "";
	public static int JogoNumJogadores = 0;

	@SuppressWarnings("static-access")
	public CriarController(JFrame jFrame) {
		super();
		jfAnterior = jFrame;
		criarGUI = new CriarGUI();
		criarGUI.setListener(new CriarListener());
		criarGUI.setVisible(true);
		criarGUI.tfNomeJogador.grabFocus();
	}

	private void fechar(){
		try {
			criarGUI.lbEstado.setVisible(false);
			criarGUI.dispose();
			jfAnterior.setVisible(true);
			finalize();
		} catch (Throwable e) {
			e.printStackTrace();
		}
	}

	public static void usuarioDesconectou(String nome) {
		for (int i = 0; i < CriarGUI.lsJogadores.getTamanho(); i++) {
			if (CriarGUI.lsJogadores.getItem(i).equals(nome)){
				CriarGUI.lsJogadores.remover(i);
				break;
			}				
		} 
	}
	
	class CriarListener implements ActionListener{
		@SuppressWarnings("static-access")
		@Override
		public void actionPerformed(ActionEvent e) {
			Object src = e.getSource();
			if(src == criarGUI.btCriar){
				if(criarGUI.tfNomeJogo.getText().isEmpty()){
					JOptionPane.showMessageDialog(null, "Insira um nome para o jogo.");
					criarGUI.tfNomeJogo.grabFocus();
				}else{
					servidor = new UDPServerController();
					servidor.setServerVisible(true);
					criarGUI.lbEstado.setVisible(true);
					criarGUI.btCriar.setEnabled(false);
					JogoNome = criarGUI.tfNomeJogo.getText();					
					socketServidor = new TCPServerController();
					socketServidor.aceitaConexao(Constantes.PORTA_TCP_SERVIDOR);
				}
			}
			if(src == criarGUI.btVoltar){
				if(servidor != null)
					if(servidor.isVisivel()){
						servidor.setServerVisible(false);
						servidor.stop();
					}
				if(socketServidor != null){
					socketServidor.stop();
					socketServidor = null;
				}
				fechar();
			}			
			if(src == CriarGUI.btIniciar){
				JogoController jogo = new JogoController(criarGUI, JogoNome, criarGUI.tfNomeJogador.getText(), socketServidor);
				jogo.setupJogo();
				jogo.atualizaInfoPanel(criarGUI.lsJogadores.getItems(), criarGUI.tfNomeJogador.getText());
				jogo.jogoGUI.jpInfo.jsListaJogadores.addItem(jogo.getNomeJogador());		//servidor se adiciona na lista
				jogo.adicionaPontuacao();
				criarGUI.setVisible(false);
				socketServidor.iniciaJogo(jogo);
			}
		}
		
	}

}
